// 要在 Node.js 中解析 Excel 文件，你可以使用 'xlsx' 库。首先，确保你已经安装了它：npm install xlsx
// 以下是一个简单的示例代码，用于读取 Excel 文件并输出其内容
const { v4: uuidv4 } = require('uuid');
const XLSX = require('xlsx');
const fs = require('fs');
const path = require('path');
const pinyin = require('pinyin');
const BASE_URL = 'C:\\fileDir\\'


// 读取 Excel 文件并输出内容
function readExcel(filePath) {
    // 读取 Excel 文件，将 'path/to/your/file.xlsx' 替换为实际的文件路径
    const workbook = XLSX.readFile(filePath);

    // 获取第一个工作表
    const sheetName = workbook.SheetNames[0];
    const worksheet = workbook.Sheets[sheetName];

    // 将工作表数据转换为 JSON 格式
    const data = XLSX.utils.sheet_to_json(worksheet);

    let info = [];
    for (let i = 1; i < data.length; i++) {
        let item = data[i];
        info.push({
            xh: item['人员名册'],
            pinyin: pinyin.pinyin(item['__EMPTY']).map(it=>it[0][0]).join('').toUpperCase(),
            name: item['__EMPTY'],
            danwei: item['__EMPTY_2'],
            // __EMPTY_3: '部门',
            bumen: item['__EMPTY_3'],
            // __EMPTY_4: '身份证号',
            shenfenzheng: item['__EMPTY_4'],
            // __EMPTY_5: '工作证号',
            gongzuozheng: item['__EMPTY_5'],
            // __EMPTY_6: '职务',
            zhiwu: item['__EMPTY_6'],
            // __EMPTY_7: '任职时间',
            renzhishijian: item['__EMPTY_7'],
            // __EMPTY_8: '性别',
            gender: item['__EMPTY_8'],
            // __EMPTY_9: '出生年月',
            birthDate: item['__EMPTY_9'],
            // __EMPTY_10: '籍贯',
            nativePlace: item['__EMPTY_10'],
            // __EMPTY_11: '入党时间',
            rudangshijian: item['__EMPTY_11'],
            // __EMPTY_12: '职级',
            zhiji: item['__EMPTY_12'],
            // __EMPTY_13: '任现级时间'
            renxianjishijian: item['__EMPTY_13']
        })
    }
    return info;
}

// 由于部门和单位是层级关系，单位下有多个部门，
// 修改部门 ID 生成逻辑，分别为单位和部门生成独立的 ID，
// 同时调整部门列表和人员列表的数据结构。
// data 是数据库里的数据 danwei 和 dept
function createDeptAndUsersList(info, data) {

    // 用于存储单位 ID 的映射
    const danweiIdMap = new Map();
    // 用于存储部门 ID 的映射
    const deptIdMap = new Map();
    // 用于存储人员 ID 的映射
    const userIdMap = new Map();

    // 生成单位列表
    const danweiList = [];
    // 生成部门列表
    const deptList = [];
    // 生成人员列表
    const userList = [];

    // 首先将现有数据中的单位和部门ID存入映射
    data.danwei.forEach(danwei => {
        danweiIdMap.set(danwei.name, danwei.id);
    });
    data.dept.forEach(dept => {
        const deptKey = `${dept.danweiName}-${dept.name}`;
        deptIdMap.set(deptKey, dept.id);
    });

    info.forEach((user) => {
        // 处理单位信息
        if (!danweiIdMap.has(user.danwei)) {
            let id = uuidv4().replace(/-/g, '').substring(0, 13)
            danweiIdMap.set(user.danwei, id);
            danweiList.push({
                id,
                name: user.danwei
            });

            // 创建单位文件夹
            const danweiPath = path.join(BASE_URL, user.danwei);
            if (!fs.existsSync(danweiPath)) {
                fs.mkdirSync(danweiPath, { recursive: true });
            }
        }
        const danweiId = danweiIdMap.get(user.danwei);

        // 处理部门信息
        const deptKey = `${user.danwei}-${user.bumen}`;
        if (!deptIdMap.has(deptKey)) {
            let id = uuidv4().replace(/-/g, '').substring(0, 13)
            deptIdMap.set(deptKey, id);
            deptList.push({
                id,
                parentId: danweiId,
                danweiName: user.danwei,
                name: user.bumen
            });
        }

        const deptId = deptIdMap.get(deptKey);

        // 处理人员信息
        const userId = uuidv4().replace(/-/g, '').substring(0, 13);
        userIdMap.set(user.name, userId);
        userList.push({
            id: userId,
            danwei:user.danwei, // 新增字段，存储人员所属单位
            pinyin:user.pinyin,
            bumen: user.bumen, // 新增字段，存储人员所属部门
            xh: user.xh,
            name: user.name.replaceAll(' ', '').replaceAll("　",''),
            shenfenzheng: user.shenfenzheng,
            gongzuozheng: user.gongzuozheng,
            zhiwu: user.zhiwu,
            renzhishijian: user.renzhishijian,
            gender: user.gender,
            birthDate: user.birthDate,
            nativePlace: user.nativePlace,
            rudangshijian: user.rudangshijian,
            zhiji: user.zhiji,
            renxianjishijian: user.renxianjishijian,
            deptId: deptId,
            path: BASE_URL + user.danwei + '\\' + user.xh + '-' + user.name + '.pdf',
            //  BASE_URL + user.danwei 文件夹地址  
            //  user.xh + '-' + user.name + '.pdf' 文件名称
        });
    });

    return {
        danweiList,
        deptList,
        userList
    };
}
module.exports = {
    readExcel,
    createDeptAndUsersList
};